let simpleClosure = {
    (name: String) -> String in
    return "Hello, \(name)"
}
print(simpleClosure("World"))  // 输出：Hello, World

func someFunctionThatTakesAClosure(closure: () -> Void) {
    // 函数体
    closure()
}
// 调用函数并传入闭包
someFunctionThatTakesAClosure(closure: {
    print("Hello, World!")
})

// 尾随闭包
someFunctionThatTakesAClosure {
    print("Hello, 尾随闭包")
}

// 尾随闭包的多种用法
// 1.闭包作为唯一参数
// 如果函数的唯一参数是一个闭包，调用时可以完全省略括号
func functionWithSingleClosure(closure: () -> Void) {
    closure()
}
// 省略括号的尾随闭包
functionWithSingleClosure {
    print("Hello, 尾随闭包")
}

// 2.多个闭包参数
func functionWithMultipleClosures(closure1: () -> Void, closure2: () -> Void) {
    closure1()
    closure2()
}
// 调用时仍然需要括号
functionWithMultipleClosures(
    closure1: {
        print("Hello, 闭包1")
    },
    closure2: {
        print("Hello, 闭包2")
    })

// 所有的闭包都可以写在外面，第一个闭包可以不写参数标签，其他闭包都需要参数标签
functionWithMultipleClosures {
    print("Hello, 闭包1")
} closure2: {
    print("Hello, 闭包2")
}

// 闭包作为最后一个参数，可以直接写在括号外
functionWithMultipleClosures(closure1: {
    print("Hello, 闭包1")
}) {
    print("Hello, 闭包2")
}

// 自动闭包
func somFunction(_ closure: @autoclosure () -> Void) {
    closure()
}
// 在调用这个函数时，你可以直接传递一个表达式，Swift 会自动将其包装成一个闭包：
somFunction(print("Hello,auto closure!"))
